home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mission 3
/
Mission 3.zip
/
Mission 3.iso
/
demovers
/
scripter
/
demo
/
filefind.sic
< prev
next >
Wrap
Text File
|
1998-09-26
|
2KB
|
74 lines
//ACE-SICPAR 8 0072
/*
* Dieser Script sucht alle *.bak in allen übergebenen Laufwerken und
* Ordnern und gibt die Namen im Fenster aus.
*/
const IS_FOLDER = 16;
proc main(...)
{
/*
* Falls Pfade an das Skript übergeben wurden, werden diese benutzt,
* ansonsten kann ein Pfad in einem Fileselektor eingegeben werden.
*/
if (argc) {
i = 0;
while (i < argc) {
folder_list[argv[i++]] = 1;
}
}
else {
if (fsel(name, "Suchpfad bestimmen", "*.*"))
folder_list[path(name)] = 1;
else
exit(1);
}
/*
* Jetzt muß eine Suchmaske eingegeben werden. Dafault ist *.bak
*/
eingabe = dialog.input("[FileFind] Suchmaske:", "*.bak");
mask = eingabe[1];
if (errno) exit(1);
/*
* In dieser Schleife werden alle Verzeichnisse rekursiv durchlaufen.
* Alle Verzeichnisse stehen in einem assoziativen Array, wobei die
* Namen der Verzeichnisse als Index benutzt werden und die noch nicht
* bearbeiteten Verzeichnisse als Eintrag eine 1 haben und die schon
* bearbeiteten eine 0.
*/
do {
new_entries = 0;
with (folder in folder_list) {
if (folder_list[folder] == 1) {
printf("\r%s...\033K", folder);
/*
* Hier wird ein Unterverzeichnis eingelesen
*/
if (filelist(files, folder)) {
++new_entries;
for (i = 0; i < files.length; ++i) {
name = files[i, 0];
/*
* Unterverzeichnisse werden in das
* assoziative Array eingetragen und
* Dateien mit der Maske verglichen
*/
if (files[i, 3] & IS_FOLDER) {
name = folder + name + "\\";
folder_list[name] = 1;
}
else {
if (imatch(name, mask))
print("\r-> ", folder, name);
}
}
}
folder_list[folder] = 0;
}
}
} while (new_entries > 0);
}